package com.mmy.dao.permission;

import java.util.List;

import javax.transaction.Transactional;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import com.mmy.domain.permissionmenu.TConstRole;

/**
 * 类的介绍：dao层
 *
 * @author
 * @date 创建日期
 * @version 1.0
 */

public interface TConstRoleRepository extends JpaRepository<TConstRole, Integer> {

	/**
	 * 函数功能说明： 根据角色ID查找角色
	 * 
	 * @param 参数说明
	 * @return 返回值说明 ：角色对象
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	@Query(value = "select *  from tConstRole where iRoleID = :iRoleID", nativeQuery = true)
	TConstRole findByRoleID(@Param("iRoleID") int iRoleID);

	/**
	 * 函数功能说明： 根据角色名称查找角色数量
	 * 
	 * @param 参数说明
	 * @return 返回值说明 ：int
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	@Query(value = "select count(*)  from tConstRole where (:strRoleName = \"\" or cRoleName like %:strRoleName%)", nativeQuery = true)
	int countRoleByRoleName(@Param("strRoleName") String strRoleName);

	/**
	 * 函数功能说明： 根据角色名称分页查找角色
	 * 
	 * @param 参数说明
	 * @return 返回值说明 ：角色集合
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	@Query(value = "select *  from tConstRole where (:strRoleName = \"\" or cRoleName like %:strRoleName%) limit :iTempPageNo,:iPageSize", nativeQuery = true)
	List<TConstRole> findByRoleName(@Param("strRoleName") String strRoleName, @Param("iTempPageNo") int iTempPageNo,
			@Param("iPageSize") int iPageSize);

	/**
	 * 函数功能说明： 查找角色最大ID
	 * 
	 * @param 参数说明
	 * @return 返回值说明 ：Object
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	@Query(value = "select MAX(iRoleID) from tConstRole", nativeQuery = true)
	Object getMaxRoleID();

	/**
	 * 函数功能说明： 通过角色ID删除角色
	 * 
	 * @param 参数说明
	 * @return 返回值说明 ：无返回值
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	@Transactional
	@Modifying
	@Query(value = "delete from tConstRole where tConstRole.iRoleID in (:iRoleID)", nativeQuery = true)
	void delByRoleID(@Param("iRoleID") List<Integer> iRoleID);

	/**
	 * 函数功能说明： 查找不包含已有ID的角色
	 * 
	 * @param 参数说明
	 * @return 返回值说明 ：角色集合
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	@Query(value = "select * from tConstRole where  not exists (  select * from tConstRoleMenu where tConstRole.iRoleID = tConstRoleMenu.iRoleID)", nativeQuery = true)
	List<TConstRole> findRoleNotInID();

	/**
	 * 函数功能说明： 新增角色ID
	 * 
	 * @param 参数说明
	 * @return 返回值说明 ：无返回值
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	@Transactional
	@Modifying
	@Query(value = "INSERT INTO tConstRole(iRoleID, cRoleName, dCreateDate, cCreator, dModifyDate, cReviser, cMemo, cSpare1, cSpare2, cSpare3, cSpare4, cSpare5) VALUES (:roleID, NULL, NULL, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL)", nativeQuery = true)
	void save(@Param("roleID") int roleID);

	/**
	 * 函数功能说明： 查找所有角色ID
	 * 
	 * @param 参数说明
	 * @return 返回值说明 ：Integer集合
	 * @throws 异常处理说明
	 * @author 创建人 shangzl
	 * @date 创建日期 2020-11-12
	 */
	@Query(value = "select iRoleID from tConstRole ", nativeQuery = true)
	List<Integer> findRoleID();

	/**
	 * 查询总经理角色信息
	 * 
	 * @author 创建人 hanxl
	 * @date 创建日期 2021.03.17
	 */
	@Query(value = "select *  from tConstRole where cRoleName = '总经理' ", nativeQuery = true)
	TConstRole getByRoleName();

}
